package controlador;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.sql.DataSource;

import Modelo.Conferencia;
import Modelo.Conferencia_asistente;
import Modelo.Pregunta;
import Modelo.Votacion_conferencia;
import Modelo.Votacion_pregunta;

import managed.MensajeModerador;
import managed.moderadorBean;
import net.sourceforge.pbeans.Store;
import net.sourceforge.pbeans.StoreException;
import net.sourceforge.pbeans.data.GenericDataSource;
import net.sourceforge.pbeans.data.ResultsIterator;

public class HiloLector implements Runnable {

	private Store basededatos;

	public void run() {

		System.out.println("Emtro al hilo....");
		// TODO Auto-generated method stub
		DataSource dataSource;
		try {

			dataSource = new GenericDataSource("com.mysql.jdbc.Driver",
					"jdbc:mysql://localhost/SMEVENTS?user=root&password=satiro");

			basededatos = new Store(dataSource);

			while (true) {

				URL url = new URL("http://192.168.101.4:8080/broker/brokerRead");

				URLConnection con = url.openConnection();
				con.setDoOutput(true);

				OutputStreamWriter out = new OutputStreamWriter(
						con.getOutputStream());
				System.out.println("shortcode=2020&password=first");

				out.write("shortcode=2020&password=first");
				out.flush();

				InputStreamReader in = new InputStreamReader(
						con.getInputStream());
				BufferedReader inD = new BufferedReader(in);

				// linea = inD.readLine();

				String linea = inD.readLine();
				System.out.println("linea inicial " + linea);

				while (linea != null) {

					System.out.println("Esta es la que llega" + linea);

					String[] split = linea.split("\\|");

					if (split.length >= 3) {

						String telefono = split[0];
						String fecha = split[1];

						String mensaje = split[2];

						System.out.println("telefono " + telefono);
						System.out.println("fecha " + fecha);
						System.out.println("Este es el mensaje " + mensaje);

						String[] otro = mensaje.split(":");
						String subShortCode = otro[0];
						System.out.println("short" + subShortCode);

						if (subShortCode.equalsIgnoreCase("0")) {
							enviarPregunta(telefono, fecha, otro[1]);

						} else {
							if (subShortCode.equalsIgnoreCase("1")) {

								votarPorPregunta(telefono, fecha, otro[1]);

							} else {
								if (subShortCode.equalsIgnoreCase("2")) {
									votarPorConferencia(telefono, fecha,
											otro[1]);
								}
							}

						}

					}

					linea = inD.readLine();
					System.out.println("Siguiente linea " + linea);

				}
				String resp = in.read() + "";
				System.out.println(resp);
				Thread.sleep(30000);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void enviarPregunta(String telefono, String fecha, String mensaje) {

		String envio = telefono + fecha + mensaje;

		
		MensajeModerador mensajeModerador = new MensajeModerador();
		mensajeModerador.setCelular(telefono);
		mensajeModerador.setFecha(fecha);
		mensajeModerador.setMensaje(mensaje);
		
		moderadorBean.Msjs().add(mensajeModerador);
		// llamar al metodo la variable que muestra

	}

	public void votarPorPregunta(String telefono, String fecha, String mensaje) {

		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/SMEVENTS", "root", "satiro");

			Statement stm = con
					.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
							ResultSet.CONCUR_UPDATABLE);

			String consulta = "SELECT pregunta FROM `preguntas` WHERE cod_pregunta='"
					+ mensaje.trim() + "'";
			System.out.println(consulta);
			ResultSet result = stm.executeQuery(consulta);

			String pregunta = null;

			if (result.first()) {

				result.beforeFirst();
				while (result.next()) {
					pregunta = result.getString("pregunta");
				}
			}

			String cons = "SELECT * FROM preguntas WHERE pregunta='" + pregunta
					+ "'";
			System.out.println(cons);

			ResultsIterator ri;
			Pregunta elegida = null;

			ri = basededatos.select(Pregunta.class, cons, new Object[0]);

			while (ri.hasNext()) {
				elegida = (Pregunta) ri.next();

			}

			String cons2 = "SELECT * FROM votacion_preguntas WHERE cod_pregunta='"
					+ mensaje.trim() + "'";
			System.out.println(cons2);

			ResultsIterator ri2;
			Votacion_pregunta voPregunta = null;

			ri2 = basededatos.select(Votacion_pregunta.class, cons2,
					new Object[0]);

			while (ri2.hasNext()) {
				voPregunta = (Votacion_pregunta) ri2.next();

			}

			if (voPregunta == null) {

				Votacion_pregunta vp = new Votacion_pregunta(elegida, 1);
				basededatos.insert(vp);
			} else {

				voPregunta.setVotacion(voPregunta.getVotacion() + 1);
				basededatos.save(voPregunta);
			}

			result.close();
			ri.close();
			ri2.close();

			//

		} catch (Exception e) {
			System.out
					.println("No se pudo realizar la conexion con la base de datos");
		}

	}

	public void votarPorConferencia(String telefono, String fecha,
			String mensaje) {

		System.out.println("Emtro al metodo....");

		DateFormat formaFecha = new SimpleDateFormat("dd/MM/yyyy");
		System.out.println();
		DateFormat formaHora = new SimpleDateFormat("HH:MM");

		Date today = new Date();

		String fechaT = formaFecha.format(today);
		String horaT = formaHora.format(today);

		// String consulta = "SELECT * FROM conferencias WHERE fecha='" + fechaT
		// + "'" + "and hora_inicio <='" + horaT + "' and hora_fin>='"
		// + horaT + "'";

		String consulta = "SELECT * FROM conferencias WHERE fecha='" + fechaT
				+ "'";
		System.out.println(consulta);

		ResultsIterator ri;
		Conferencia elegida = null;
		try {
			ri = basededatos.select(Conferencia.class, consulta, new Object[0]);

			Conferencia conf = null;
			while (ri.hasNext()) {
				conf = (Conferencia) ri.next();

				System.out.println("validacion"
						+ (conf.getHora_inicio().compareTo(horaT) < 0)
						+ (conf.getHora_fin().compareTo(horaT) > 0));

				System.out.println("horaInicio:" + conf.getHora_inicio());
				System.out.println("horaSistema:" + horaT);
				System.out.println(conf.getHora_inicio().compareTo(horaT));
				System.out.println("horaFin:" + conf.getHora_fin());

				if ((conf.getHora_inicio().compareTo(horaT) < 0)
						&& (conf.getHora_fin().compareTo(horaT) > 0)) {
					elegida = conf;
				}
			}

			System.out.println("mensaje" + mensaje);
			Votacion_conferencia vc = new Votacion_conferencia(elegida,
					Integer.parseInt(mensaje));
			basededatos.insert(vc);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
